// 数据请求独立文件维护
import axios from 'axios'
// 导入Pinia仓库模块
import { useUserStore } from '@/stores'
// 导入element-plus弹窗提示
import { ElMessage } from 'element-plus'
// 导入router路由
import router from '@/router'

// 接口地址
const baseURL = 'http://127.0.0.1/tp5/public/index.php'

// 设置基础参数
const instance = axios.create({
  // TODO 1.基础地址，超时时间
  baseURL,
  timeout: 10000 // 超时10秒钟
})

// 请求拦截器
instance.interceptors.request.use((config) => {
  // TODO 2.携带token
  const userStore = useUserStore()
  // 如果token存在，Authorization添加token
  if(userStore.token) {
    config.headers.Authorization = userStore.token
  }
  return config
}, (err) => Promise.reject(err))

// 响应拦截器
instance.interceptors.response.use((res) => {
  // TODO 4.摘取核心响应数据
  if(res.data.code === 0) {
    return res
  }
  // TODO 3.处理业务失败
  // 处理业务失败，给错误提示，抛出错误
  ElMessage.error(res.data.message || '服务异常') // 弹窗提示，后台返回的消息，如果后台没有消息就提示 '服务异常'
  return Promise.reject(res.data)
}, (err) => {
  // TODO 5. 处理401错误
  // 错误的特殊情况 => 401 权限不足 或token 过期 => 拦截到登录
  if(err.response?.status === 401) {
    router.push('/login')
  }
  
  // 错误的默认情况 => 只要给提示
  ElMessage.error(err.response.data.message || '服务异常')
  return Promise.reject(err)
})

// 默认导出instance
export default instance
// 导出接口地址
export { baseURL }